/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sv.com.intesal.general.controlador;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import sv.com.intesal.clases.abstracts.ControladorAbstract;
import sv.com.intesal.general.bean.Departamento;
import sv.com.intesal.general.bean.Pais;
import sv.com.intesal.general.sql.SQLDepartamento;

/**
 *
 * @author ejerez
 */
public class DepartamentoControlador extends ControladorAbstract {

    public void insert(Departamento d) throws Exception {
        try {
            super.setPreparedStatement(SQLDepartamento.insert);
            super.ps.setInt(1, d.getCodigo_p());
            super.ps.setString(2, d.getNombre_d());
            super.ps.setString(3, super.v.getEstado(d.getEstado_filtro_d()));
            super.ps.executeUpdate();
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }

    public void update(Departamento d) throws Exception {
        try {
            super.setPreparedStatement(SQLDepartamento.update);
            super.ps.setInt(1, d.getCodigo_p());
            super.ps.setString(2, d.getNombre_d());
            super.ps.setString(3, super.v.getEstado(d.getEstado_filtro_d()));
            super.ps.setInt(4, d.getCodigo_d());
            super.ps.executeUpdate();
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }

    public List<Departamento> getDepartamentos() throws Exception {
        List<Departamento> lista = new ArrayList<Departamento>();
        try {
            this.getExecuteQuery(SQLDepartamento.getDepartamentos);
            while (super.rs.next()) {
                lista.add(this.getDepartamento(super.rs));
            }
            return lista;
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }

    public List<Departamento> getDepartamentoActivos() throws Exception {
        List<Departamento> lista = new ArrayList<Departamento>();
        try {
            this.getExecuteQuery(SQLDepartamento.getDepartamentoActivos);
            while (super.rs.next()) {
                lista.add(this.getDepartamento(super.rs));
            }
            return lista;
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }

    public List<Departamento> getDepartamentoActivos_x_Pais(Integer codigo_p) throws Exception {
        List<Departamento> lista = new ArrayList<Departamento>();
        try {
            super.setPreparedStatement(SQLDepartamento.getDepartamentoActivos_x_Pais);
            super.ps.setInt(1, codigo_p);
            super.rs = super.ps.executeQuery();
            while (super.rs.next()) {
                lista.add(this.getDepartamento(super.rs));
            }
            return lista;
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }

    private Departamento getDepartamento(ResultSet rs) throws Exception {
        try {
            Departamento d = new Departamento();
            d.setCodigo_d(rs.getInt("codigo_d"));
            d.setNombre_d(rs.getString("nombre_d"));
            d.setEstado_d(rs.getString("estado_d"));
            d.setEstado_filtro_d(v.getEstado(rs.getString("estado_d")));

            d.setNombre_p(rs.getString("nombre_p"));
            d.setCodigo_p(rs.getInt("codigo_p"));
            return d;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public List<Pais> getPaisesActivos() throws Exception {
        try {
            PaisControlador pc = new PaisControlador();
            return pc.getPaisesActivos();
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

}
